﻿Public Class JoueurConcret
    Inherits Joueur
    Implements Observateur

    Private _carteJoueur As String

    Private _dct As New Dictionary(Of String, List(Of String))

    Public Sub AfficherVosin()
        For Each player As String In _dct.Keys
            Console.WriteLine(String.Format("{0} voit {1}: {2}", NomJoueur, player, String.Join(",", _dct(player).ToArray)))
            Console.WriteLine()
        Next
    End Sub
    Public ReadOnly Property NomObservateur As String Implements Observateur.NomObservateur
        Get
            Return NomJoueur
        End Get
    End Property


    Public Sub New(nomJoueur As String)
        MyBase.New(nomJoueur)
    End Sub

    Public Overrides Sub NotifierObservateur()

        For Each o As Observateur In MyBase.Observateurs
            o.Actualiser(String.Format("Joueur {0} notify Joueur {1}. Carte joué: {2}", NomJoueur, o.NomObservateur, _carteJoueur))
        Next
    End Sub

    Public Sub JouerCarte(carte As String)
        _carteJoueur = carte
        For Each o As Observateur In MyBase.Observateurs
            o.MAJVoisin(NomJoueur, carte)
        Next

    End Sub

    Public Sub Actualiser(message As String) Implements Observateur.Actualiser
        Console.WriteLine(message)
    End Sub

    Public Sub MAJVoisin(nomJoueur As String, carte As String) Implements Observateur.MAJVoisin
        If Not _dct.Keys.Contains(nomJoueur) Then
            _dct.Add(nomJoueur, New List(Of String))
        End If
        _dct(nomJoueur).Add(carte)
    End Sub
End Class
